/**
 * date : 2010-11-11
 * author : Kim Jong-sun
 * comment : Ajax로 댓글 구현, JSON 사용
 */

var httpRequest = null;	// 객체를 담을 변수

/*
 * XMLHttpRequest 객체 생성 메서드
 */
function getXMLHttpRequest() {
	if (window.ActiveXObject) {
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				return new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e1) { return null; }
		}
	} else if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else {
		return null;
	}
}

/*
 * Ajax 요청 전송 메서드
 */
function sendRequest(url, params, callback, method) {
	//alert(url + " " + params + " " + callback + " " + method);
	httpRequest = getXMLHttpRequest();
	
	var httpMethod = method ? method : 'GET';
	
	if (httpMethod != 'GET' && httpMethod != 'POST') {
		httpMethod = 'GET';
	}
	
	var httpParams = (params == null || params == '') ? null : params;
	var httpUrl = url;
	
	if (httpMethod == 'GET' && httpParams != null) {
		httpUrl = httpUrl + "?" + httpParams;
	}
	
	httpRequest.open(httpMethod, httpUrl, true);
	httpRequest.setRequestHeader(
		'Content-Type', 'application/x-www-form-urlencoded');
	httpRequest.onreadystatechange = callback;
	httpRequest.send(httpMethod == 'POST' ? httpParams : null);
}

/*
 * 댓글 목록 callback
 */
function getCommentsList(){		
	// ajax 응답 코드
	if(httpRequest.readyState == 4){
		// http 응답 코드
		if(httpRequest.status == 200){
			//alert(xhr.responseText);	// 응답 확인 alert 
			var result = httpRequest.responseText;		// 응답 데이터
			var jsonData = eval('('+result+')');
			var listDiv = document.getElementById('commentsList');	// 댓글 리스트가 보이는 div
			
			for(var i = 0 ; i < jsonData.length ; i++){
				// div 생성 후 댓글 작성
				var commentsDiv = makeCommentView(jsonData[i]);
				listDiv.appendChild(commentsDiv);
			}
		} else {
			alert("댓글 목록 로딩 실패 : " + httpRequest.status);
		}	
	}
}

/*
 * 댓글 쓰기 callback
 */ 
function addCommentsResult(){
	// ajax 응답코드
	//alert(httpRequest.readyState + "  " + httpRequest.status);
	if(httpRequest.readyState == 4){
		// http 응답 코드
		if(httpRequest.status == 200){
			var result = httpRequest.responseText;		// 응답 데이터
			var jsonData = eval('('+result+')');
			var listDiv = document.getElementById('commentsList');
			var commentsDiv = makeCommentView(jsonData);
			listDiv.appendChild(commentsDiv);
			
			document.addCommentsForm.comments.value = "";
		}
	}
}

/*
 * 댓글 삭제 callback
 */
function delCommentsResult(){
	if(httpRequest.readyState == 4){
		if(httpRequest.status == 200){
			var result = httpRequest.responseText;
			result = result.replace(/^\s+|\s+$/g,'');	// 공백제거
			// 해당 div 삭제
			var commentsDiv = document.getElementById("c" + result);
			commentsDiv.parentNode.removeChild(commentsDiv);
			alert("댓글 삭제 완료");
		}
	}
}

//댓글 쓰기
function addComments(mode, memberId, contentId){
	var comments = document.addCommentsForm.comments.value;
	if(comments == ""){
		alert("댓글을 입력하세요.");
		return false;
	}
	var params = "mode=" + mode + "&memberId=" + memberId + "&contentId=" + contentId + "&comments=" + comments;
	// alert(params); // debug code
	// 파라미터 url, params, callback, method
	sendRequest('/wetogether/board.do', params, addCommentsResult, 'POST');
}

// 댓글 삭제
function delComments(commentsId, contentId){
	if(confirm("삭제하시겠습니까?")){
		// 파라미터 url, params, callback, method
		var params = "mode=deleteComments&contentId=" + contentId + "&commentsId=" + commentsId;
		sendRequest('/wetogether/board.do', params, delCommentsResult, 'POST');
	}
}

// 댓글 보여주는 div form 생성
function makeCommentView(comment){
	var commentsDiv = document.createElement('div');		// 댓글이 위치할 div 생성
	commentsDiv.setAttribute('id', 'c'+comment.commentsId);	// div에 id 속성 추가
	
	// html로 댓글 변환
	var html = '<strong>' + comment.memberId + '</strong> ' + comment.regDate + ' ';
	html += '<input type="button" value="삭제" onclick="delComments(' + comment.commentsId + ', ' + comment.contentId + ')" /><br />';
	html += comment.comments;

	// 댓글 보여주기
	commentsDiv.innerHTML = html;
	return commentsDiv;
}

